package case23

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"log"
	"time"
)

func Test() {

	fmt.Println("🎯示例二十三：在中间件中使用 Goroutine")

	router := gin.Default()

	// 接口内部 使用协程异步执行
	router.GET("/long_async", func(c *gin.Context) {
		// 创建在 goroutine 中使用的副本
		cCp := c.Copy()
		go func() {
			// 用 time.Sleep() 模拟一个长任务。
			time.Sleep(5 * time.Second)

			// 请注意您使用的是复制的上下文 "cCp"，这一点很重要
			log.Println("Done! in path " + cCp.Request.URL.Path)
		}()
	})

	router.GET("/long_sync", func(c *gin.Context) {
		// 用 time.Sleep() 模拟一个长任务。
		time.Sleep(5 * time.Second)

		// 因为没有使用 goroutine，不需要拷贝上下文
		log.Println("Done! in path " + c.Request.URL.Path)
	})

	router.Run(":60000")
}
